package cn.iocoder.yudao.module.planet.service;


import cn.iocoder.yudao.module.planet.controller.app.dto.MembershipCreateReqDTO;
import cn.iocoder.yudao.module.planet.controller.app.dto.MembershipDTO;
import cn.iocoder.yudao.module.planet.controller.app.dto.MembershipUpdateReqDTO;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 成员关系服务的 API 接口
 * 
 * @author 系统生成
 */
public interface MembershipService {

    /**
     * 创建成员关系
     * 
     * @param createReqDTO 创建请求
     * @return 成员关系ID
     */
    Long createMembership(@Valid MembershipCreateReqDTO createReqDTO);

    /**
     * 更新成员关系
     * 
     * @param updateReqDTO 更新请求
     */
    void updateMembership(@Valid MembershipUpdateReqDTO updateReqDTO);

    /**
     * 删除成员关系
     * 
     * @param id 成员关系ID
     */
    void deleteMembership(Long id);

    /**
     * 获取成员关系详情
     * 
     * @param id 成员关系ID
     * @return 成员关系详情
     */
    MembershipDTO getMembership(Long id);

    /**
     * 根据用户ID和星球ID获取成员关系
     * 
     * @param userId 用户ID
     * @param planetId 星球ID
     * @return 成员关系列表
     */
    List<MembershipDTO> getMembershipListByUserIdAndPlanetId(Long userId, Long planetId);

    /**
     * 根据用户ID获取其在所有星球中的成员关系
     * 
     * @param userId 用户ID
     * @return 成员关系列表
     */
    List<MembershipDTO> getMembershipListByUserId(Long userId);

    /**
     * 根据星球ID获取成员关系列表
     * 
     * @param planetId 星球ID
     * @return 成员关系列表
     */
    List<MembershipDTO> getMembershipListByPlanetId(Long planetId);

    /**
     * 检查用户是否有权限
     * 
     * @param userId 用户ID
     * @param planetId 星球ID
     * @param type 分组类型
     * @param permission 权限名称
     * @return 是否有权限
     */
    boolean hasPermission(Long userId, Long planetId, String type, String permission);

    /**
     * 获取用户在特定星球和分组类型中的所有权限
     * 
     * @param userId 用户ID
     * @param planetId 星球ID
     * @param type 分组类型
     * @return 权限映射
     */
    Map<String, Boolean> getPermissions(Long userId, Long planetId, String type);

}